﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MoqWord.Model.Data
{
    public class KeyMap
    {
        public Dictionary<Keys, string> keyMap = new Dictionary<Keys, string>
        {
            { Keys.Back, "Backspace" },
            { Keys.Tab, "Tab" },
            { Keys.Enter, "Enter" },
            { Keys.Space, "Space" },
            { Keys.Escape, "Esc" },
            { Keys.PageUp, "Page Up" },
            { Keys.PageDown, "Page Down" },
            { Keys.End, "End" },
            { Keys.Home, "Home" },
            { Keys.Left, "←" },
            { Keys.Up, "↑" },
            { Keys.Right, "→" },
            { Keys.Down, "↓" },
            { Keys.Insert, "Insert" },
            { Keys.Delete, "Delete" },
            { Keys.D0, "0" },
            { Keys.D1, "1" },
            { Keys.D2, "2" },
            { Keys.D3, "3" },
            { Keys.D4, "4" },
            { Keys.D5, "5" },
            { Keys.D6, "6" },
            { Keys.D7, "7" },
            { Keys.D8, "8" },
            { Keys.D9, "9" },
            { Keys.A, "A" },
            { Keys.B, "B" },
            { Keys.C, "C" },
            { Keys.D, "D" },
            { Keys.E, "E" },
            { Keys.F, "F" },
            { Keys.G, "G" },
            { Keys.H, "H" },
            { Keys.I, "I" },
            { Keys.J, "J" },
            { Keys.K, "K" },
            { Keys.L, "L" },
            { Keys.M, "M" },
            { Keys.N, "N" },
            { Keys.O, "O" },
            { Keys.P, "P" },
            { Keys.Q, "Q" },
            { Keys.R, "R" },
            { Keys.S, "S" },
            { Keys.T, "T" },
            { Keys.U, "U" },
            { Keys.V, "V" },
            { Keys.W, "W" },
            { Keys.X, "X" },
            { Keys.Y, "Y" },
            { Keys.Z, "Z" },
            { Keys.F1, "F1" },
            { Keys.F2, "F2" },
            { Keys.F3, "F3" },
            { Keys.F4, "F4" },
            { Keys.F5, "F5" },
            { Keys.F6, "F6" },
            { Keys.F7, "F7" },
            { Keys.F8, "F8" },
            { Keys.F9, "F9" },
            { Keys.F10, "F10" },
            { Keys.F11, "F11" },
            { Keys.F12, "F12" },
            { Keys.NumPad0, "Num 0" },
            { Keys.NumPad1, "Num 1" },
            { Keys.NumPad2, "Num 2" },
            { Keys.NumPad3, "Num 3" },
            { Keys.NumPad4, "Num 4" },
            { Keys.NumPad5, "Num 5" },
            { Keys.NumPad6, "Num 6" },
            { Keys.NumPad7, "Num 7" },
            { Keys.NumPad8, "Num 8" },
            { Keys.NumPad9, "Num 9" },
            { Keys.Multiply, "*" },
            { Keys.Add, "+" },
            { Keys.Subtract, "-" },
            { Keys.Decimal, "." },
            { Keys.Divide, "/" },
            { Keys.OemSemicolon, ";" },
            { Keys.Oemplus, "=" },
            { Keys.Oemcomma, "," },
            { Keys.OemMinus, "-" },
            { Keys.OemPeriod, "." },
            { Keys.OemQuestion, "/" },
            { Keys.Oemtilde, "`" },
            { Keys.OemOpenBrackets, "[" },
            { Keys.OemPipe, "\\" },
            { Keys.OemCloseBrackets, "]" },
            { Keys.OemQuotes, "'" },
            { Keys.Oem8, "OEM 8" },
            { Keys.OemBackslash, "\\" },
            { Keys.LWin, "Win" },
            { Keys.RWin, "Win" },
            { Keys.Apps, "Menu" },
            { Keys.Sleep, "Sleep" },
            { Keys.LShiftKey, "Shift" },
            { Keys.RShiftKey, "Shift" },
            { Keys.LControlKey, "Ctrl" },
            { Keys.RControlKey, "Ctrl" },
            { Keys.LMenu, "Alt" },
            { Keys.RMenu, "Alt" }
        };

        public static string getKeyName(string key)
        {
                Dictionary<string, string> Keys = new Dictionary<string, string>
                {
                    { "Backspace", "Backspace" },
                    { "Tab", "Tab" },
                    { "Enter", "Enter" },
                    { "Shift", "Shift" },
                    { "Control", "Ctrl" },
                    { "Alt", "Alt" },
                    { "Pause", "Pause" },
                    { "CapsLock", "CapsLock" },
                    { "Escape", "Esc" },
                    { "Space", "Space" },
                    { "PageUp", "PageUp" },
                    { "PageDown", "PageDown" },
                    { "End", "End" },
                    { "Home", "Home" },
                    { "ArrowLeft", "←" },
                    { "ArrowUp", "↑" },
                    { "ArrowRight", "→" },
                    { "ArrowDown", "↓" },
                    { "PrintScreen", "PrintScreen" },
                    { "Insert", "Insert" },
                    { "Delete", "Delete" },
                    { "0", "0" },
                    { "1", "1" },
                    { "2", "2" },
                    { "3", "3" },
                    { "4", "4" },
                    { "5", "5" },
                    { "6", "6" },
                    { "7", "7" },
                    { "8", "8" },
                    { "9", "9" },
                    { "A", "A" },
                    { "B", "B" },
                    { "C", "C" },
                    { "D", "D" },
                    { "E", "E" },
                    { "F", "F" },
                    { "G", "G" },
                    { "H", "H" },
                    { "I", "I" },
                    { "J", "J" },
                    { "K", "K" },
                    { "L", "L" },
                    { "M", "M" },
                    { "N", "N" },
                    { "O", "O" },
                    { "P", "P" },
                    { "Q", "Q" },
                    { "R", "R" },
                    { "S", "S" },
                    { "T", "T" },
                    { "U", "U" },
                    { "V", "V" },
                    { "W", "W" },
                    { "X", "X" },
                    { "Y", "Y" },
                    { "Z", "Z" },
                    { "Meta", "Meta" },
                    { "ContextMenu", "ContextMenu" },
                    { "F1", "F1" },
                    { "F2", "F2" },
                    { "F3", "F3" },
                    { "F4", "F4" },
                    { "F5", "F5" },
                    { "F6", "F6" },
                    { "F7", "F7" },
                    { "F8", "F8" },
                    { "F9", "F9" },
                    { "F10", "F10" },
                    { "F11", "F11" },
                    { "F12", "F12" },
                    { "NumLock", "NumLock" },
                    { "ScrollLock", "ScrollLock" },
                    { "Semicolon", "Semicolon" },
                    { "Equal", "Equal" },
                    { "Comma", "Comma" },
                    { "Minus", "Minus" },
                    { "Period", "Period" },
                    { "Slash", "Slash" },
                    { "Backquote", "Backquote" },
                    { "BracketLeft", "BracketLeft" },
                    { "Backslash", "Backslash" },
                    { "BracketRight", "BracketRight" },
                    { "Quote", "Quote" }
                };
            return Keys.TryGetValue(key, out string? newVal) ? newVal : key;
        }

        public static int getKeyNumber(string key)
        {
            Dictionary<string, int> Keys = new Dictionary<string, int>
                {
                    { "Backspace", 8 },
                    { "Tab", 9 },
                    { "Enter", 13 },
                    { "Shift", 16 },
                    { "Control", 17 },
                    { "Alt", 18 },
                    { "Pause", 19 },
                    { "CapsLock", 20 },
                    { "Escape", 27 },
                    { "Space", 32 },
                    { "PageUp", 33 },
                    { "PageDown", 34 },
                    { "End", 35 },
                    { "Home", 36 },
                    { "ArrowLeft", 37 },
                    { "ArrowUp", 38 },
                    { "ArrowRight", 39 },
                    { "ArrowDown", 40 },
                    { "PrintScreen", 44 },
                    { "Insert", 45 },
                    { "Delete", 46 },
                    { "0", 48 },
                    { "1", 49 },
                    { "2", 50 },
                    { "3", 51 },
                    { "4", 52 },
                    { "5", 53 },
                    { "6", 54 },
                    { "7", 55 },
                    { "8", 56 },
                    { "9", 57 },
                    { "A", 65 },
                    { "B", 66 },
                    { "C", 67 },
                    { "D", 68 },
                    { "E", 69 },
                    { "F", 70 },
                    { "G", 71 },
                    { "H", 72 },
                    { "I", 73 },
                    { "J", 74 },
                    { "K", 75 },
                    { "L", 76 },
                    { "M", 77 },
                    { "N", 78 },
                    { "O", 79 },
                    { "P", 80 },
                    { "Q", 81 },
                    { "R", 82 },
                    { "S", 83 },
                    { "T", 84 },
                    { "U", 85 },
                    { "V", 86 },
                    { "W", 87 },
                    { "X", 88 },
                    { "Y", 89 },
                    { "Z", 90 },
                    { "Meta", 91 },
                    { "ContextMenu", 93 },
                    { "F1", 112 },
                    { "F2", 113 },
                    { "F3", 114 },
                    { "F4", 115 },
                    { "F5", 116 },
                    { "F6", 117 },
                    { "F7", 118 },
                    { "F8", 119 },
                    { "F9", 120 },
                    { "F10", 121 },
                    { "F11", 122 },
                    { "F12", 123 },
                    { "NumLock", 144 },
                    { "ScrollLock", 145 },
                    { "Semicolon", 186 },
                    { "Equal", 187 },
                    { "Comma", 188 },
                    { "Minus", 189 },
                    { "Period", 190 },
                    { "Slash", 191 },
                    { "Backquote", 192 },
                    { "BracketLeft", 219 },
                    { "Backslash", 220 },
                    { "BracketRight", 221 },
                    { "Quote", 222 }
                };

            return Keys.TryGetValue(key.ToUpper(), out int val) ? val : 0;
         }
    }
}
